/* =========
Class Tag
========= */
function Tag(unIdTag, unNomTag, unIdRootTag, unLienTag, isSelectedTag, uneNoteTag, unLienTagP)
{
    this.idTag     = unIdTag;
    this.nomTag    = unNomTag;
    this.idRootTag = unIdRootTag;
    this.selected  = false;
    this.lienTag   = unLienTag.replace(/&amp;/g, '&');
    this.lienTagP  = unLienTagP.replace(/&amp;/g, '&');
    this.choixTag  = (isSelectedTag == 1) ? true : false;
    this.noteTag   = uneNoteTag;
    this.busy      = false; //en cours de renommage
    this.drag      = false; //en cours de drag
    this.oldNomTag = unNomTag;
}

Tag.prototype.ajaxSave = function()
{
    debLoad();
    var lepostBody = 'ACTION_TAG=ADD&NOM_TAG[]='+this.nomTag+'&ID_ROOT_TAG[]='+this.idRootTag;

    var o = this;
    var handlerFunc = function(t){
        var e = t.responseText.split('\n');
        var r = e[0].split(':');
        if(r[0] != 'ok'){
          alert(r[1]);
        }
        else{
            //o.idTag = r[1];
            tags[o.idTag] = o;
            idsTag.push(o.idTag);
            nomTag.push(o.nomTag);
            nbTag = idsTag.length;
            o.afficher(true);
        }
    }

    new Ajax.Request('index.php?page=ajaxTag', {method:'post', postBody:lepostBody, onSuccess:handlerFunc, onFailure:errFunc, onComplete:finLoad});   
}

Tag.prototype.ajaxMv = function()
{
    debLoad();
    var lepostBody = 'ACTION_TAG=UP_NOM&NEW_NOM_TAG[]='+this.nomTag+'&NOM_TAG[]='+this.oldNomTag;

    var o = this;
    var handlerFunc = function(t){
        var e = t.responseText.split('\n');
        var r = e[0].split(':');
        if(r[0] != 'ok'){
            alert(r[1]);
        }
        else{
            //o.idTag = e[1];
            tags[o.idTag] = o;
            idsTag.push(o.idTag);
            nomTag.push(o.nomTag);
            nbTag = idsTag.length;
            o.afficher();
        }
        o.oldNomTag = o.nomTag;
    }

    new Ajax.Request('index.php?page=ajaxTag', {method:'post', postBody:lepostBody, onSuccess:handlerFunc, onFailure:errFunc, onComplete:finLoad});   
}

Tag.prototype.ajaxRm = function()
{
    debLoad();
    var lepostBody = 'ACTION_TAG=DEL&NOM_TAG[]='+this.nomTag;

    var o = this;
    var handlerFunc = function(t) 
    {
        var e = t.responseText.split('\n');
        var r = e[0].split(':');
        if(r[0] != 'ok'){
            alert(r[1]);
        }
        else{
            o.idTag = e[1];
            tags[o.idTag] = o;
            idsTag.push(o.idTag);
            nomTag.push(o.nomTag);
            nbTag = idsTag.length;
            o.afficher();
        }
        o.oldNomTag = o.nomTag;
    }

    new Ajax.Request('index.php?page=ajaxTag', {method:'post', postBody:lepostBody, onSuccess:handlerFunc, onFailure:errFunc, onComplete:finLoad});   
}

Tag.prototype.afficher = function(insert)
{
    var id    = this.idTag;
    var objet = this;

    if(this.choixTag){
        var classSelect = ' selected';
    }
    else{
        var classSelect = '';
    }

    if(insert != null){
        var struct = 
        '<div class="tag" id="tag'+id+'">'+
        ' <div class="tagNom note'+this.noteTag+classSelect+'" id="tagNom'+id+'" ></div>'+
        '</div>';

        // Affichage
        new Insertion.Before('tagsR', struct);
    }

    this.afficheNom();

    // Evenements
    if(id_is_admin == 1 || id_ok == 1){
        new Draggable('tag'+id, {revert:function(){objet.drag = true; return true;}});
    }
    // "revert:function(){..}" => fix bug de propagation d'event non stopée sous FF (old scriptaculous)

    if(id_is_admin == 1){
        Event.observe('tag'+id, 'click', function(event){
            var shift   = event.shiftKey;
            var control = event.ctrlKey;
            if (control){
                objet.select();
            }
            else if (shift){
                objet.busy = true;
                $('tagNom'+id).innerHTML = '<form id="tagFormNom'+id+'"><input id="tagFormNomChamp'+id+'" type="text" value="'+objet.nomTag+'" /></form>';
                $('tagFormNomChamp'+id).focus();


                function finMv(){
                    objet.renommer($F('tagFormNomChamp'+id));
                    objet.busy = false;
                    return false;
                }

                Event.observe('tagFormNom'+id, 'submit', finMv);
                Event.observe('tagFormNomChamp'+id, 'blur', finMv);
            }
            else{ // Suivre le lien (si pas "busy" et pas "drag")

                if(!(objet.busy || objet.drag)){
                    if(actionLienTagEx)
                    {
                        window.location = 'index.php?'+objet.lienTag;
                    }
                    else
                    {
                        window.location = 'index.php?'+objet.lienTagP;
                    }
                }
                else{
                    objet.drag = false; // fix bug FF voir plus haut new Draggable(...)
                    return false;
                }
            }
        });      
    }
    else{
        Event.observe('tag'+id, 'click', function(event){
           // Suivre le lien (si pas "busy" et pas "drag")

                if(!(objet.busy || objet.drag)){
                    if(actionLienTagEx)
                    {
                        window.location = 'index.php?'+objet.lienTag;
                    }
                    else
                    {
                        window.location = 'index.php?'+objet.lienTagP;
                    }
                }
                else{
                    objet.drag = false; // fix bug FF voir plus haut new Draggable(...)
                    return false;
                }
        });
    }
}

Tag.prototype.select = function()
{
    this.selected = !this.selected;
    if(this.selected){
        Element.addClassName('tag'+this.idTag, 'selMultiTag');
    }
    else{
    Element.removeClassName('tag'+this.idTag, 'selMultiTag');
    }
}

Tag.prototype.afficheNom = function()
{
    var id    = this.idTag;
    var objet = this;
    $('tagNom'+id).innerHTML = '<span id="tagNomValue'+id+'">&nbsp;'+this.nomTag+'&nbsp;</span>';
}	

Tag.prototype.supprimer = function()
{
    this.selected = false;
    $('tag'+this.idTag).style.display = 'none';
    var i = 0;
    for(i = 0 ; i < nbItem ; i++ ){
        items[idsItem[i]].supprimerTag(this.nomTag);
        items[idsItem[i]].afficheTags();
    }
    this.ajaxRm();
}

Tag.prototype.renommer = function(n)
{
    var oldName = this.nomTag;
    if(this.nomTag != n && inArray(n, nomTag) == -1){
        nomTag.push(n);
        nomTag.splice(nomTag.positionOf(this.nomTag),1); 
        var i = 0;
        for(i = 0 ; i < nbItem ; i++ ){
            if(items[idsItem[i]].supprimerTag(this.nomTag)){
                items[idsItem[i]].ajouterTag(n);
                items[idsItem[i]].afficheTags();
            }
        }
        this.nomTag   = n;
        this.lienTag  = this.lienTag.replace(oldName, this.nomTag);
        this.lienTagP = this.lienTagP.replace(oldName, this.nomTag);
        this.ajaxMv();
    }
    this.afficheNom();
}

Tag.prototype.toString = function()
{
    return this.nomTag;
}

/* ======================
Fonctions sur les tags
====================== */

function tagsSelected(deselect)
{
    var clef;
    var r = new Array();
    for(clef in tags){
        if(typeof(tags[clef]) == "object"){
            if(tags[clef].selected){
                if(deselect == null){
                    r.push(tags[clef].idTag);
                }
                else{
                    tags[clef].select();
                }
            }
        }
    }
    return r;
}

function tagsAction(type, lesIds)
{
    var i = 0;
    for(i = 0 ; i < lesIds.length ; i++){
        if(type == 'supprimer'){
            tags[lesIds[i]].supprimer();
        }
    }
}

// retroune l'id à partir de l'id du div (marche pour les tags et les items)
function getIdFromIdDiv(idDiv)
{
    var r = idDiv.replace(/tag/, '');
    r     = r.replace(/item/, '');
    if(r){
        return r;
    }
    else{ 
        return idDiv;
    }
}
